home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / MPW Oberon 2.1168 / OInterfaces / Threads.mod < prev    next >
Encoding:
Text File  |  1995-08-10  |  7.0 KB  |  212 lines  |  [TEXT/MPS ]

  1. (*
  2.      File:        Threads.mod
  3.  
  4.      Contains:    Thread Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Package:    Universal Interfaces 2.0 in “MPW Latest” on ETO #17
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs.applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. *)
  19.  
  20. (*$TAGS-*)
  21. (*$CALLING PASCAL*)
  22. MODULE Threads;
  23.  
  24. IMPORT SYSTEM, Types, Memory;
  25.  
  26. (* $PUSH*)
  27. (* $ALIGN MAC68K*)
  28. (* $LibExport+*)
  29.     
  30. TYPE
  31.     ThreadState* = INTEGER;
  32.  
  33.  
  34. CONST
  35.     kReadyThreadState*            = 0;
  36.     kStoppedThreadState*            = 1;
  37.     kRunningThreadState*            = 2;
  38.  
  39. (* Error codes have been meoved to Errors.(pah) *)
  40. (* Thread environment characteristics *)
  41.     
  42. TYPE
  43.     ThreadTaskRef* = Types.Ptr;
  44.  
  45. (* Thread characteristics *)
  46.     ThreadStyle* = LONGINT;
  47.  
  48.  
  49. CONST
  50.     kCooperativeThread*            = ASH(1,0);
  51.     kPreemptiveThread*            = ASH(1,1);
  52.  
  53. (* Thread identifiers *)
  54.     
  55. TYPE
  56.     ThreadID* = LONGINT;
  57.  
  58.  
  59. CONST
  60.     kNoThreadID*                    = 0;
  61.     kCurrentThreadID*            = 1;
  62.     kApplicationThreadID*        = 2;
  63.  
  64. (* Options when creating a thread *)
  65.     
  66. TYPE
  67.     ThreadOptions* = LONGINT;
  68.  
  69.  
  70. CONST
  71.     kNewSuspend*                    = ASH(1,0);
  72.     kUsePremadeThread*            = ASH(1,1);
  73.     kCreateIfNeeded*                = ASH(1,2);
  74.     kFPUNotNeeded*                = ASH(1,3);
  75.     kExactMatchThread*            = ASH(1,4);
  76.  
  77. (* Information supplied to the custom scheduler *)
  78.  
  79. TYPE
  80.     SchedulerInfoRec* = RECORD
  81.         InfoRecSize*:            LONGINT;
  82.         CurrentThreadID*:        ThreadID;
  83.         SuggestedThreadID*:        ThreadID;
  84.         InterruptedCoopThreadID*: ThreadID;
  85.     END;
  86.  
  87.     SchedulerInfoRecPtr* = POINTER TO SchedulerInfoRec;
  88.  
  89. (*
  90.     The following ProcPtrs cannot be interchanged with UniversalProcPtrs because
  91.     of differences between 680x0 and PowerPC runtime architectures with regard to
  92.     the implementation of the Thread Manager.
  93.  *)
  94. (* Prototype for thread's entry (main) routine *)
  95.     voidPtr* = Types.Ptr;
  96.  
  97.     ThreadEntryProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (threadParam: (*ΔΔUNIVΔΔ*) Types.Ptr): voidPtr;
  98.  
  99. (* Prototype for custom thread scheduler routine *)
  100.     ThreadSchedulerProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (schedulerInfo: SchedulerInfoRecPtr): ThreadID;
  101.  
  102. (* Prototype for custom thread switcher routine *)
  103.     ThreadSwitchProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (threadBeingSwitched: ThreadID; switchProcParam: (*ΔΔUNIVΔΔ*) Types.Ptr);
  104.  
  105. (* Prototype for thread termination notification routine *)
  106.     ThreadTerminationProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (threadTerminated: ThreadID; terminationProcParam: (*ΔΔUNIVΔΔ*) Types.Ptr);
  107.  
  108. (* Prototype for debugger NewThread notification *)
  109.     DebuggerNewThreadProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (threadCreated: ThreadID);
  110.  
  111. (* Prototype for debugger DisposeThread notification *)
  112.     DebuggerDisposeThreadProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (threadDeleted: ThreadID);
  113.  
  114. (* Prototype for debugger schedule notification *)
  115.     DebuggerThreadSchedulerProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (schedulerInfo: SchedulerInfoRecPtr): ThreadID;
  116.  
  117. (* Thread Manager routines *)
  118.  
  119. PROCEDURE CreateThreadPool*(threadStyle: ThreadStyle; numToCreate: INTEGER; stackSize: Memory.Size): Types.OSErr;
  120.     (*$IF NOT GENERATINGCFM*)
  121.     INLINE PASCAL $303C, $0501, $ABF2;
  122.     (*$END*)
  123. PROCEDURE GetFreeThreadCount*(threadStyle: ThreadStyle; VAR freeCount: INTEGER): Types.OSErr;
  124.     (*$IF NOT GENERATINGCFM*)
  125.     INLINE PASCAL $303C, $0402, $ABF2;
  126.     (*$END*)
  127. PROCEDURE GetSpecificFreeThreadCount*(threadStyle: ThreadStyle; stackSize: Memory.Size; VAR freeCount: INTEGER): Types.OSErr;
  128.     (*$IF NOT GENERATINGCFM*)
  129.     INLINE PASCAL $303C, $0615, $ABF2;
  130.     (*$END*)
  131. PROCEDURE GetDefaultThreadStackSize*(threadStyle: ThreadStyle; VAR stackSize: Memory.Size): Types.OSErr;
  132.     (*$IF NOT GENERATINGCFM*)
  133.     INLINE PASCAL $303C, $0413, $ABF2;
  134.     (*$END*)
  135. PROCEDURE ThreadCurrentStackSpace*(thread: ThreadID; VAR freeStack: LONGINT): Types.OSErr;
  136.     (*$IF NOT GENERATINGCFM*)
  137.     INLINE PASCAL $303C, $0414, $ABF2;
  138.     (*$END*)
  139. PROCEDURE NewThread*(threadStyle: ThreadStyle; threadEntry: ThreadEntryProcPtr; threadParam: (*ΔΔUNIVΔΔ*) Types.Ptr; stackSize: Memory.Size; options: ThreadOptions; threadResult: (*ΔΔUNIVΔΔ*) Types.Ptr; VAR threadMade: ThreadID): Types.OSErr;
  140.     (*$IF NOT GENERATINGCFM*)
  141.     INLINE PASCAL $303C, $0E03, $ABF2;
  142.     (*$END*)
  143. PROCEDURE DisposeThread*(threadToDump: ThreadID; threadResult: (*ΔΔUNIVΔΔ*) Types.Ptr; recycleThread: BOOLEAN): Types.OSErr;
  144.     (*$IF NOT GENERATINGCFM*)
  145.     INLINE PASCAL $303C, $0504, $ABF2;
  146.     (*$END*)
  147. PROCEDURE YieldToThread*(suggestedThread: ThreadID): Types.OSErr;
  148.     (*$IF NOT GENERATINGCFM*)
  149.     INLINE PASCAL $303C, $0205, $ABF2;
  150.     (*$END*)
  151. PROCEDURE YieldToAnyThread*(): Types.OSErr;
  152.     (*$IF NOT GENERATINGCFM*)
  153.     INLINE PASCAL $42A7, $303C, $0205, $ABF2;
  154.     (*$END*)
  155. PROCEDURE GetCurrentThread*(VAR currentThreadID: ThreadID): Types.OSErr;
  156.     (*$IF NOT GENERATINGCFM*)
  157.     INLINE PASCAL $303C, $0206, $ABF2;
  158.     (*$END*)
  159. PROCEDURE GetThreadState*(threadToGet: ThreadID; VAR threadState: ThreadState): Types.OSErr;
  160.     (*$IF NOT GENERATINGCFM*)
  161.     INLINE PASCAL $303C, $0407, $ABF2;
  162.     (*$END*)
  163. PROCEDURE SetThreadState*(threadToSet: ThreadID; newState: ThreadState; suggestedThread: ThreadID): Types.OSErr;
  164.     (*$IF NOT GENERATINGCFM*)
  165.     INLINE PASCAL $303C, $0508, $ABF2;
  166.     (*$END*)
  167. PROCEDURE SetThreadStateEndCritical*(threadToSet: ThreadID; newState: ThreadState; suggestedThread: ThreadID): Types.OSErr;
  168.     (*$IF NOT GENERATINGCFM*)
  169.     INLINE PASCAL $303C, $0512, $ABF2;
  170.     (*$END*)
  171. PROCEDURE SetThreadScheduler*(threadScheduler: ThreadSchedulerProcPtr): Types.OSErr;
  172.     (*$IF NOT GENERATINGCFM*)
  173.     INLINE PASCAL $303C, $0209, $ABF2;
  174.     (*$END*)
  175. PROCEDURE SetThreadSwitcher*(thread: ThreadID; threadSwitcher: ThreadSwitchProcPtr; switchProcParam: (*ΔΔUNIVΔΔ*) Types.Ptr; inOrOut: BOOLEAN): Types.OSErr;
  176.     (*$IF NOT GENERATINGCFM*)
  177.     INLINE PASCAL $303C, $070A, $ABF2;
  178.     (*$END*)
  179. PROCEDURE SetThreadTerminator*(thread: ThreadID; threadTerminator: ThreadTerminationProcPtr; terminationProcParam: (*ΔΔUNIVΔΔ*) Types.Ptr): Types.OSErr;
  180.     (*$IF NOT GENERATINGCFM*)
  181.     INLINE PASCAL $303C, $0611, $ABF2;
  182.     (*$END*)
  183. PROCEDURE ThreadBeginCritical*(): Types.OSErr;
  184.     (*$IF NOT GENERATINGCFM*)
  185.     INLINE PASCAL $303C, $000B, $ABF2;
  186.     (*$END*)
  187. PROCEDURE ThreadEndCritical*(): Types.OSErr;
  188.     (*$IF NOT GENERATINGCFM*)
  189.     INLINE PASCAL $303C, $000C, $ABF2;
  190.     (*$END*)
  191. PROCEDURE SetDebuggerNotificationProcs*(notifyNewThread: DebuggerNewThreadProcPtr; notifyDisposeThread: DebuggerDisposeThreadProcPtr; notifyThreadScheduler: DebuggerThreadSchedulerProcPtr): Types.OSErr;
  192.     (*$IF NOT GENERATINGCFM*)
  193.     INLINE PASCAL $303C, $060D, $ABF2;
  194.     (*$END*)
  195. PROCEDURE GetThreadCurrentTaskRef*(VAR threadTRef: ThreadTaskRef): Types.OSErr;
  196.     (*$IF NOT GENERATINGCFM*)
  197.     INLINE PASCAL $303C, $020E, $ABF2;
  198.     (*$END*)
  199. PROCEDURE GetThreadStateGivenTaskRef*(threadTRef: ThreadTaskRef; threadToGet: ThreadID; VAR threadState: ThreadState): Types.OSErr;
  200.     (*$IF NOT GENERATINGCFM*)
  201.     INLINE PASCAL $303C, $060F, $ABF2;
  202.     (*$END*)
  203. PROCEDURE SetThreadReadyGivenTaskRef*(threadTRef: ThreadTaskRef; threadToSet: ThreadID): Types.OSErr;
  204.     (*$IF NOT GENERATINGCFM*)
  205.     INLINE PASCAL $303C, $0410, $ABF2;
  206.     (*$END*)
  207.  
  208. (* $ALIGN RESET*)
  209. (* $POP*)
  210.  
  211.  END Threads.
  212.